{
 "cells": [
  {
   "metadata": {
    "collapsed": true
   },
   "cell_type": "markdown",
   "source": [
    "#### Agent与Chain的区别\n",
    "在Chain中行动序列是硬编码的、固定流程的，像是\"线性流水线\"。\n",
    "而Agent则是采用语言模型作为推理引擎，具备一定的自主决策能力, 来确定以什么样的顺序采取什么样的行动，像是\"拥有大脑的机器人\"。\n",
    "它可以根据任务动态决定：\n",
    "    如何拆解任务\n",
    "    需要调用哪些工具\n",
    "    以什么顺序调用\n",
    "    如何利用好中间结果推进任务"
   ],
   "id": "4c9221658f2e9134"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "#### 什么是Agent\n",
    "Agent(智能体)是一个通过动态协调大模型和工具来完成复杂任务的智能系统。\n",
    "它让大模型充当\"决策大脑\"，根据用户输入自主选择和执行工具(如搜索、计算、数据库查询等)，最终生成精准的响应。\n",
    "Agent模块有几个关键组件：\n",
    "    1.工具Tool\n",
    "        LangChain提供了广泛的入门工具，但也支持自定义工具，包括自定义描述。\n",
    "        在框架内，每个功能或函数都被封装成一个工具(Tools)，具有自己的输入、输出及处理方法。\n",
    "        具体步骤：\n",
    "            1.Agent接收任务后，通过大模型推理选择适合的工具处理任务\n",
    "            2.一旦选定，LangChain将任务输入传递给该工具，工具处理输入生成输出\n",
    "            3.输出经过大模型推理，可用于其他工具的输入或作为最终结果返回给用户\n",
    "    2.工具集Toolkits\n",
    "        在构建Agent时，通常提供给大模型的工具不仅是一个两个，而是一组可供选择的工具集，这样可以让大模型在完成任务时有更多的选择\n",
    "    3.智能体/代理Agent\n",
    "        智能体/代理(agent)可以协助我们做出决策，调用相应的api。底层的实现方式是通过大模型来觉得下一步执行什么动作\n",
    "    4.代理执行器AgentExecutor\n",
    "        AgentExecutor本质上是代理的运行时，负责协调智能体的决策和实际工具的执行。\n",
    "        AgentExecutor是一个很好的起点，但当你开始拥有更多定制化的代理时，它就不够灵活了。\n",
    "        为了解决这个问题，我们构建了LangGraph，使其成为灵活、高度可控的运行时。"
   ],
   "id": "9d0ca2b95b4e914a"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "#### Agent的类型\n",
    "顾名思义就是某件事可以由不同的人去完成，最终结果可能是一样的，但做的过程可能各不相同。\n",
    "比如一个公司需求，普通开发可以编写，技术经理可以编写，CTO也可以编写。\n",
    "虽然都能完成最后的需求，但CTO最的过程可能更加直观、高效。\n",
    "在LangChain中的Agent的类型就是为你提供不同的\"问题解决方式\"的。\n",
    "Agents的核心类型有两种模式：\n",
    "    方式1：Function Call模式\n",
    "    方式2：ReAct模式\n",
    "\n",
    "FUNCTION_CALL模式\n",
    "    基于结构化函数调用(如OpenAI Function Calling)\n",
    "    直接生成工具调用参数(JSON格式)\n",
    "    效率更高、适合工具明确的场景\n",
    "    典型AgentType:\n",
    "        第一种：AgentType.OPENAI_FUNCTIONS\n",
    "        第二种：AgentType.OPENAI_MULTI_FUNCTIONS\n",
    "\n",
    "ReACT模式\n",
    "    基于文本推理的链式思考(Reasoning + Acting)，具备反思和自我纠错能力。\n",
    "        推理(Reasoning)：分析当前状态，决定下一步行动\n",
    "        行动(Acting)：调用工具并返回结果\n",
    "    通过自然语言描述决策过程\n",
    "    适合需要明确推理步骤的场景，例如智能客服、问答系统、任务执行等\n",
    "    典型AgentType:\n",
    "        第一种：AgentType.ZERO_SHOT_REACT_DESCRIPTION(零样本推理，可以在没有预先训练的情况下尝试解决新的问题)\n",
    "        第二种：AgentType.STRUCTURE_CHAT_ZERO_REACT_DESCRIPTION(无记忆对话)\n",
    "\n",
    "Agent两种典型类型对比\n",
    "特性          Function Call模式         ReAct模式\n",
    "底层机制        结构化函数调用             自然语言处理\n",
    "输出格式        JSON/结构化数据           自由文本\n",
    "适合场景        需要高校工具调用           需要解释决策过程\n",
    "典型延迟        较低(直接参数化调用)        较高(需生成完整文本)\n",
    "LLM要求        需支持函数调用(如gpt-4)     通用模型即可"
   ],
   "id": "26278c261a2e1515"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
